package entity;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;

//过期键小顶堆实现
//1.队列不允许存在重复元素、重复元素替换
//2.每次取出来都是最小的过期元素
//3.队列长度不限制
public class ExpireKeyMinHeap{
    private PriorityQueue<ExpireKey> queue=new PriorityQueue<>();
    private Map<ExpireKey,ExpireKey> replacementMap=new HashMap<>();

    public void removeHead(){
        //移除Head元素
        queue.poll();
    }

    public ExpireKey getHead(){
        //获取Head元素
        return queue.peek();
    }

    public void add(ExpireKey element){
        ExpireKey originalElement = replacementMap.get(element);
        if (originalElement!=null)
            // 从队列中移除旧元素
            queue.remove(originalElement);
        else
            // 如果元素不存在，添加到队列中并保存原始元素以便后续替换
            replacementMap.put(element,element);
        // 添加新元素到队列
        queue.add(element);
    }

    public boolean isEmpty(){
        return queue.isEmpty();
    }

    public int size(){
        return queue.size();
    }

}
